package com.ponhu.ea2.goodsCenter.provider.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ponhu.ea2.common.basic.model.PagedResult;
import com.ponhu.ea2.dto.PhInventoryAppraisalDto;
import com.ponhu.ea2.dto.PhInventoryDetailEditDto;
import com.ponhu.ea2.dto.PhInventoryGoodsEditDto;
import com.ponhu.ea2.entity.Inventory;
import com.ponhu.ea2.query.InventoryInfoQuery;
import com.ponhu.ea2.query.PickInventoryQuery;
import com.ponhu.ea2.scmcenter.model.dto.procurementoder.UpdateProductDto;
import com.ponhu.ea2.vo.*;

import java.util.List;

public interface InventoryService extends IService<Inventory> {

    List<Inventory> getInventoryListByCodes(List<String> inventoryCodes);

    Inventory getInventoryByCode(String inventoryCode);

    /**
     * 条件查询全部货品列表
     *
     * @return
     */
    IPage<Inventory> getAllInventorys(InventoryInfoQuery inventoryInfoQuery);

    /**
     * 根据货品编码修改货品中检状态
     *
     * @return
     */
    void syncInventoryAppraisal(PhInventoryAppraisalDto phInventoryAppraisalDto);

    /**
     * 编辑货品基本信息
     *
     * @param inventory
     * @param detailEditDto
     */
    void editPhInventory(Inventory inventory, PhInventoryDetailEditDto detailEditDto);

    /**
     * 根据货品ID修改货品入库价
     */
    void editInventoryWarehousePrice(PhInventoryGoodsEditDto phInventoryDetailEditDto);

    /**
     * 根据条件分页查询选品列表数据
     * @param pickInventoryQuery
     * @return
     */
    PagedResult<PickInventoryVo> getPickInventoryListByCondition(PickInventoryQuery pickInventoryQuery);

    /**
     * 获取选品导出数据列表
     * @param query
     * @return
     */
    List<PickInventoryDetailVo> getImportPickInventoryDataList(PickInventoryQuery query);
    /**
     * 校验是否是第一次编辑,并保存第一次编辑人信息
     * @param editDto
     */
    void checkAndSaveFirstEdit(PhInventoryGoodsEditDto editDto);

    UpdateProductDto getPhInventoryByIdForPurchase(Long inventoryId);

    /**
     * 选品列表汇总结果查询
     * @param query
     * @return
     */
    PickInventoryStatisticsVo getPickInventoryStatisticsInfo(PickInventoryQuery query);

    /**
     * 根据货品编码获取上下架状态
     * @param inventoryCodes
     * @return
     */
    List<PhGoodsStatusToAmqpVo> getGoodsStatusByCode(List<String> inventoryCodes);

    /**
     * 根据货品编码获取价格
     * @param inventoryCodes
     * @return
     */
    List<PhGoodsPriceToAmqpVo> getGoodsPriceByCode(List<String> inventoryCodes);

    /**
     * 根据货品编码获取货品基本信息
     * @param inventoryCodes
     * @return
     */
    List<PhInventoryToAmqpVo>  getInventoryBasicByCode(List<String> inventoryCodes);
}
